package com.t.bricks.bussiness.db.mapper.shoppingcart;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.t.bricks.bussiness.db.entity.shoppingcart.ShoppingCart;
import com.t.bricks.bussiness.db.entity.shoppingcart.WaresSmall;
import com.t.bricks.bussiness.db.entity.shoppingcart.base.ShoppingCartBase;
import com.t.bricks.bussiness.model.shoppingcart.ConditionShoppingCart;
import com.t.bricks.model.OrderInfo;
import com.t.bricks.model.Page;

@Mapper
public interface ShoppingCartMapper {
	
	/**
	 * 添加
	 * @Param shoppingCart
	 * @return int
	 */
	int add(ShoppingCart shoppingCart);

	/**
	 * 删除
	 * @Param uId
	 * @Param iVersion
	 * @return int
	 */
	int del(@Param("uId") String uId, @Param("iVersion") Integer iVersion);

	/**
	 * 根据编号查询数据
	 * @Param uId
	 * @return ShoppingCart
	 */
	ShoppingCart findById(@Param("uId") String uId);

	/**
	 * 取记录对应的版本号
	  * @param uId 记录主键
	 * @return Integer 如果记录不存在则返回null
	 */
	Integer getiVersion(@Param("uId") String uId);

	/**
	 * 检查待新增内容是否存在重复数据
	 * @Param shoppingCartBaseData
	 * @return int 重复返回true
	 */
	int checkRepeatByAdd(ShoppingCartBase shoppingCartBase);
	
	/**
	 * 查询分页信息
	 * @param page 分页信息对象
	 * @param orders 排序数据集合
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return List<ShoppingCart>
	 */
	List<ShoppingCart> findByPage(
		@Param("page") Page page,
		@Param("orders") List<OrderInfo> orders,
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionShoppingCart condition
	);
	
	/**
	 * 查询分页总数
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return int
	 */
	int findByPageCount(
			@Param("sLikeStr") String sLikeStr,
			@Param("dLikeDateSt") Date dLikeDateSt,
			@Param("dLikeDateEd") Date dLikeDateEd,
			@Param("condition") ConditionShoppingCart condition
	);

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @Param uId
	 * @return ShoppingCart
	 */
	ShoppingCart findByPageRow(@Param("uId") String uId);

	/**
	 * 查询搜索用的数据
	 * @param whereStr 查询条件字符串
	 * @param orders 排序数据集合
	 * @return List<ShoppingCart>
	 */
	List<ShoppingCart> findBySearch(
			@Param("whereStr") String whereStr,
			@Param("orders") List<OrderInfo> orders
	);

	/**
	 * 修改状态
	 * @param uId 记录编号
	 * @param iState 新的状态
	 * @param iVersion 当前版本号
	 * @param sMemo 备注信息(null则不更新)
	 * @return
	 */
	int changeState(
		@Param("uId") String uId,
		@Param("iState") Integer iState,
		@Param("iVersion") Integer iVersion,
		@Param("sMemo") String sMemo
	);
	
	//---------------------------- 自动生成代码结束 ----------------------------//
	
	/**
	 * 修改数量
	 * @param uId 购物车记录
	 * @param iVersion 当前版本号
	 * @param iAppendCount 增加(减少)的数量
	 * @return int
	 */
	int editCount(
		@Param("uId") String uId,
		@Param("iVersion") Integer iVersion,
		@Param("iAppendCount") Integer iAppendCount
	);
	
	/**
	 * 检查状态
	 * @return int
	 */
	int validState();
	
	/**
	 * 查询商品购物车数据
	 * @param sCustomerId 顾客账号
	 * @param sWaresId 商品编号
	 * @return ShoppingCart
	 */
	ShoppingCart findByWaresId(
		@Param("sCustomerId") String sCustomerId,
		@Param("sWaresId") String sWaresId
	);
	
	/**
	 * 查找商品信息
	 * @param sWaresId 商品编号
	 * @return
	 */
	WaresSmall findWares(@Param("sWaresId") String sWaresId);

	/**
	 * 批量删除数据
	 * @param ids 记录编号集合
	 * @return int
	 */
	int dels(@Param("ids") List<String> ids);
	
}
